/* CsJni - .NET / Java Bridge
 * 
 * Copyright 2010 Robert E. Burke Licensed under the Apache License, Version 
 * 2.0 (the "License"); you may not use this file except in compliance with 
 * the License. You may obtain a copy of the License at 
 * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable 
 * law or agreed to in writing, software distributed under the License is 
 * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 * KIND, either express or implied. See the License for the specific language 
 * governing permissions and limitations under the License. 
*/

using System;
using System.Collections.Generic;
using System.Text;

namespace CsJni.PlatformAbstraction
{
    internal abstract class AbstractVfprintfExtractor
    {
        private IntPtr mLibraryHandle;
        private IPlatform mPlatform;

        protected AbstractVfprintfExtractor()
        {
        }

        protected IntPtr LibraryHandle { get { return mLibraryHandle; } }

        protected IPlatform Platform { get { return mPlatform; } }

        protected abstract void InitMethods();

        protected abstract void FreeMethods();

        public void Init(IPlatform platform, string dll)
        {
            try
            {
                mPlatform = platform;
                mLibraryHandle = mPlatform.LoadDynamicLibrary(dll);
                InitMethods();
            }
            catch (Exception ex)
            {
                throw new JniException("Error loading vfprint.", ex);
            }
        }

        public void Free()
        {
            if (mLibraryHandle != IntPtr.Zero)
            {
                mPlatform.FreeDynamicLibrary(mLibraryHandle);
                mLibraryHandle = IntPtr.Zero;
                FreeMethods();
            }
        }

        public abstract string ExtractVfprintf(IntPtr filePointer, IntPtr format, IntPtr arguments);
    }
}
